package behavioral.templatemethod;

public abstract class ACourse {
    //makeCourse 必须加final 不然子类是可以重写的。
    protected final void makeCourse(){
        this.makePPT();
        this.makeVideo();
        if(this.needWriteArtical()){
            this.makeArtical();
        }
        this.packageCourse();
    }

    final void makePPT(){
        System.out.println("制作ppt");
    }

    final void makeVideo(){
        System.out.println("制作video");
    }

    final void makeArtical(){
        System.out.println("制作手记");
    }

    //钩子方法
    protected boolean needWriteArtical(){
        return false;
    }

    abstract void packageCourse();
}
